package com.wjs.controller;

import com.wjs.entity.Result;
import com.wjs.entity.User;
import com.wjs.exception.BusinessException;
import com.wjs.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 用户控制器类，用于处理与用户相关的HTTP请求
 */
@RestController
@RequestMapping("/user")
public class UserController {
    /**
     * 注入用户服务类，用于执行用户相关的业务逻辑
     */
    @Autowired
    private UserService userService;

    /**
     * 用户登录
     *
     * @param user 包含用户名和密码的User对象，通过HTTP请求体传递
     * @return 返回包含状态码、消息和用户对象的Result对象
     * @throws BusinessException 当用户名或密码错误时抛出的业务异常
     */
    @PostMapping("/login")
    public Result<User> login(@RequestBody User user) {
        User loggedInUser = userService.login(user.getUsername(), user.getPassword());
//        System.out.println(user.getUsername() + ":" + user.getPassword());
        if (loggedInUser == null) {
            System.out.println("用户名或密码错误");
            throw new BusinessException("用户名或密码错误");
        }
        return new Result<>(1, "登录成功", loggedInUser);
    }

    /**
     * 用户注册
     *
     * @param user 包含用户名和密码的User对象，通过HTTP请求体传递
     * @return 返回包含状态码、消息和用户对象的Result对象
     * @throws BusinessException 当用户名已存在时抛出的业务异常
     */
    @PostMapping("/register")
    public Result<User> register(@RequestBody User user) {
        // 检查用户名是否已存在
        User existingUser = userService.getByUsername(user.getUsername());
        if (existingUser != null) {
            throw new BusinessException("用户名已存在，请重新输入");
        }
        userService.register(user);
        return new Result<>(1, "注册成功", user);
    }

    /**
     * 更新用户信息
     *
     * @param user 包含更新信息的User对象，通过HTTP请求体传递
     * @return 返回包含状态码、消息和用户对象的Result对象
     * @throws BusinessException 当更新失败时抛出的业务异常
     */
    @PutMapping("/update")
    public Result<User> update(@RequestBody User user) {
        User updatedUser = userService.update(user);
        //System.out.println("更新用户信息：" + updatedUser);
        if (updatedUser == null) {
            throw new BusinessException("更新用户信息失败!!");
        }
        return new Result<>(1, "用户信息已更新", updatedUser);
    }

    /**
     * 重置用户密码
     *
     * @param user 包含用户名和新密码的User对象，通过HTTP请求体传递
     * @return 返回包含状态码、消息和用户对象的Result对象
     * @throws BusinessException 当重置密码失败时抛出的业务异常
     */
    public Result<User> forgotPassword(@RequestBody User user) {
        User updatedUser = userService.forgotPassword(user);
        //System.out.println("更新用户信息：" + updatedUser);
        if (updatedUser == null) {
            throw new BusinessException("重置密码失败!!");
        }
        return new Result<>(1, "重置密码成功", updatedUser);
    }

}
